iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Software Development

玩轉C# 進階學習之旅系列 第 11

玩轉C#之【委派&事件】

  • 分享至 

  • xImage
  •  

介紹

委派

透過委派可以實現把方法作為參數傳遞

從範例可以看出我們將DoNothing當成參數在傳遞

public delegate void Test();
void Main()
{
	Test method = new Test(this.DoNothing);//實體化一個委派
	method += new Test(this.DoNothing);//實體化一個委派

	method();//也可以省略Invoke的寫法
}

private void DoNothing()
{
	Console.WriteLine("Test");
}

事件

事件:是帶event關鍵字的委派的實體,可以限制變數被外部直接使用/直接賦予值(安全保障)
特點:

  • 不能直接Invoke()
  • 不能 賦予 null => = null

委派和事件的區別和關係?

  • 委派是一個類型
  • 事件是委派類型的一個實例

事件:可以把一堆可變的動作/行為封裝出去,交給第三方指定
預定義一樣,程式設計的時候,我們可以把程式分成兩部分
一部分是固定的,直接寫死,還有不固定的地方,通過一個事件去開放接口,外部可以隨意地擴展動作

框架:完成固定/通用部分,把可變部分留出擴展點,支持自定義

譬如:我們在設計WinFrom的時候,框架已經把Butoon的偵測鼠左鍵點擊的寫完了,而我們只需要去撰寫滑鼠左健點下去要做的事情。

使用到的設計模式:觀察者模式:

使用方式

  1. 宣告一個委派型別
    public delegate void NoReturnNoPara();
  2. 產生一個委派物件
    Test method = new Test(this.DoNothing);//實體化一個委派
  3. 執行委派方法
    • method.Invoke();//使用他的方法
    • method();//也可以省略Invoke的寫法

關於泛型委派、解偶、非同步多執行緒、委派的歷史寫法演進之後會專門寫一篇文章跟大家講解

參考資料

微軟-委派
微軟-事件

本篇已同步發表至個人部落格
https://moushih.com/2022ithome11/


上一篇
玩轉C#之【物件導向】
下一篇
玩轉C#之【序列化、反序列化】
系列文
玩轉C# 進階學習之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言